﻿/*
* Изучение значимых и ссылочных типов. Изменение полей 
* в упакованных типах без применения интерфейсов.
*/

using System;

namespace ImmutableVal
{
    // Point - значимый тип
    internal struct Point
    {
        private int m_x, m_y;

        public Point(int x, int y)
        {
            m_x = x;
            m_y = y;
        }

        public void Change(int x, int y)
        {
            m_x = x;
            m_y = y;
        }

        public override string ToString()
        {
            return String.Format("({0}, {1})", m_x.ToString(), m_y.ToString());
        }
    }

    public sealed class Program
    {
        public static void Main()
        {
            Point p = new Point(2, 2);

            Console.WriteLine(p);

            p.Change(5, 5);
            Console.WriteLine(p);

            Object o = p;

            Console.WriteLine(o);

            ((Point)o).Change(123, 123);
            Console.WriteLine(o);
        }
    }
}